home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / comm / ums / UMS11_9_beta.lha / UMS / rexx / MailForwarder.rexx < prev    next >
OS/2 REXX Batch file  |  1997-03-09  |  4KB  |  177 lines

  1. /*
  2. *$VER: UMS MailForwarder V1.1
  3. *
  4. *Forward mails width UMS. You *must* read mailforwarder.doc
  5. *to use this.
  6. *
  7. *Author:  Stefan Sticht, sticht@edith.deg.sub.org, 2:2494/22.4@fidonet
  8. *History: V1.0 03 Jan 94 Sticht   first version
  9. *History: V1.1 27 Jul 94 hG       · use UMSInit.rexx and hgrexxsupport.library
  10. *History:                         · template according LoginGuide
  11. *History:                         · copies msg no longer, just changes some fields
  12. *History: v1.2 25 Jan 95 hG       adapted to UMS V11
  13. *
  14. */
  15.  
  16. /*** Startup ***/
  17.  
  18. ReplyName = "as" /* "Mail-Daemon" */
  19. ReplyPassword = "ready"
  20.  
  21. call addlib("rexxdossupport.library", 0, -30)
  22. call addlib("ums.library", 0, -210, 11)
  23. call UMSInitConsts()
  24.  
  25. /*** Arguments ***/
  26.  
  27. parse SOURCE . " " . " " ProgramName .
  28. ArgsTemplate = "NAME/A,PASSWORD,SERVER/K"
  29. args.SERVER = ""
  30. args.PASSWORD = ""
  31.  
  32. parse arg arguments
  33. if strip(arguments) = '?' then do
  34.   call writech(STDOUT, ArgsTemplate || ': ')
  35.   arguments = readln(STDIN)
  36. end; else nop
  37. if ~ReadArgs(arguments,ArgsTemplate,"args.") then do
  38.   say Fault(RC, ProgramName)
  39.   exit 10
  40. end; else nop
  41. /*** Login ***/
  42.  
  43. /*
  44.  *  login as user
  45.  */
  46. account = UMSLogin(args.NAME, args.PASSWORD, args.SERVER)
  47. IF account = 0 THEN DO
  48.     SAY "unable to login as user '" || args.NAME || "'!"
  49.     EXIT 10
  50.     END
  51.  
  52. /*
  53.  *  login as importer "mailforwarder", too
  54.  */
  55. faccount = UMSLogin(ReplyName, ReplyPassword, args.SERVER)
  56. IF faccount ~= 0 THEN DO
  57.  
  58.   Empty_Flags = UMSMakeFlags()
  59.   FLAG_0 = MakeFlags(0)
  60.   FLAG_1 = MakeFlags(1)
  61.   FLAGS_01 = MakeFlags(0,1)
  62.   Mask =  MakeFlags(UMSUSTAT_ViewAccess, UMSUSTAT_Old)
  63.   Match = MakeFlags(UMSUSTAT_ViewAccess)
  64.  
  65.     /*
  66.      *  read our config vars for this user
  67.      */
  68.     toaddr = UMSReadConfig(account, "mailforwarder.toaddr", Name, 0)
  69.     toname = UMSReadConfig(account, "mailforwarder.toname", Name, 0)
  70.  
  71.     IF toname ~= "" THEN DO
  72.  
  73.         /*
  74.          *  select all new mails for this account
  75.          *
  76.          *  set local flag 0 on all new messages
  77.          */
  78.         CALL UMSSelectFlags(account, "L", FLAG_0, Empty_Flags,,, "U", Mask, Match)
  79.         /*
  80.          *  set local flag 1 on all mails
  81.          */
  82.         CALL UMSSelectField(account, "L", FLAG_1, Empty_Flags,,, UMSCODE_Group, "", TRUE)
  83.  
  84.         /*
  85.          *  main loop: read, convert and write all unread messages
  86.          */
  87.         last = 0
  88.         msgs = 0
  89.         DO FOREVER
  90.             /*
  91.              *  find next message with local flags 0 and 1 set
  92.              */
  93.             last = UMSSearchFlags(account, "LOCAL", FLAGS_01, FLAGS_01, last)
  94.             IF last = 0 THEN LEAVE
  95.             /*
  96.              *  read message
  97.              */
  98.             DROP msg.
  99.             IF UMSReadMsgAll(account, last, msg.) THEN DO
  100.                 IF UMSReadMsgInfo(account, last, msg.) THEN DO
  101.                     /*
  102.                      *  convert message
  103.                      */
  104.                     msg.UMSCODE_ToName = toname
  105.                     IF toaddr ~= "" THEN msg.UMSCODE_ToAddr = toaddr
  106.                     ELSE drop msg.UMSCODE_ToAddr
  107.  
  108.                     msg.hardlink = last
  109.  
  110.                     /*
  111.                      *  write message
  112.                      */
  113.                     IF UMSWriteMsg(faccount, msg.) = 0 THEN CALL CheckErr(faccount)
  114.                     ELSE msgs = msgs + 1
  115.                     END
  116.  
  117.                 ELSE CALL CheckErr(account)
  118.                 END
  119.  
  120.             ELSE CALL CheckErr(account)
  121.             END /* DO FOREVER */
  122.  
  123.         /*
  124.          *  display a short report
  125.          */
  126.         IF msgs > 0 THEN SAY "Forwarded" msgs "mail(s) to" toname || "."
  127.         ELSE SAY "Nothing to forward."
  128.         END
  129.  
  130.     ELSE DO
  131.         SAY "No mailforwarder installed for this user!"
  132.         END
  133.     END
  134. ELSE DO
  135.     SAY "Unable to login as user 'mailforwarder'!"
  136.     SAY "Check your configuration!"
  137.     END
  138.  
  139. /*** Final cleanup ***/
  140.  
  141. BREAK_C:
  142. BREAK_D:
  143. BREAK_E:
  144. BREAK_F:
  145. ERROR:
  146. HALT:
  147. IOERR:
  148. SYNTAX:
  149.  
  150. IF RC ~= 0 THEN DO
  151.     SAY "Error:" rc ERRORTEXT(rc) "in line" sigl
  152.     END
  153.  
  154. /*** Logout ***/
  155.  
  156. IF faccount ~= 0 THEN DO
  157.     CALL UMSLogout(faccount)
  158.     faccount = 0
  159.     END
  160.  
  161. IF account ~= 0 THEN DO
  162.     CALL UMSLogout(account)
  163.     account = 0
  164.     END
  165.  
  166. EXIT
  167.  
  168. /*** Support ***/
  169.  
  170. CheckErr: PROCEDURE
  171.     PARSE ARG account
  172.     err = UMSErrNum(account)
  173.     IF err ~= 0 THEN DO
  174.         SAY "UMS Error #" || err || ": " || UMSErrTxt(account)
  175.     END
  176.     RETURN
  177.